let qiniu = require('qiniu'); // 引入七牛的官网库(包含七牛提供的所有用法) 具体参考npm 地址:https://www.npmjs.com/package/qiniu
let nanoid = require('nanoid'); // 引入nanoid 生成随机的字符串作为上传到自己的cdn的文件的名字 具体参考npm: https://www.npmjs.com/package/nanoid
let {ak, sk, bucket} = require('../config').qiniu; // 从配置文件获取七牛的ak,sk，bucket 等七牛信息, ak,sk 不能丢失不能放在前端(前端不安全，如果丢失，资源就不安全了)，bucket是在七牛创建的内容存储区域的名字
let {fileUrl} = require('../config');
let mac = new qiniu.auth.digest.Mac(ak, sk); // 七牛的认证
let config = new qiniu.conf.Config(); // 七牛的配置
config.zone = qiniu.zone.Zone_z2; // 指定cdn的区域,这里选择的华南,创建bucket的时候选择了华南要对应
let bucketManager = new qiniu.rs.BucketManager(mac, config); // 创建一个bucket对应用于上传、下载等操作这块bucket的对象

/**
 * 接受一个参数url ，网络资源的url地址(比如一张图片的地址,一个视频的地址)
 * 上传图片到七牛图床  具体参考 https://developer.qiniu.com/kodo/sdk/3828/node-js-v6 (七牛nodejs的api地址)
 */
function fetchResourcesToCdn (url) {
  let key = `${nanoid()}.${url.split('/')[url.split('/').length - 1].split('.')[1]}`; // 获取参数url的后缀
  // 封装一个promise,因为官方提供的方法是回调,为了容易后面的写法容易这里就封装一下(不封装用回调也可以)
  return new Promise((resolve, reject) => {
    // 从网络上下载文件并山传到七牛cdn
    bucketManager.fetch(url, bucket, key, function (err, respBody, respInfo) {
      if (err) {
        reject(err); // 出错就reject
      } else {
        if (respInfo.statusCode === 200) {
          resolve(`${fileUrl}${respBody.key}`); // 返回七牛上传成功后返回的对象,可以打印看下具体的内容有哪些
        } else {
          console.log(respInfo.statusCode);
          console.log(respBody);
        }
      }
    });
  });
}

module.exports = {
  fetchResourcesToCdn
};
